package com.tbit.uqbike.webmanager.dao.core;

import com.tbit.uqbike.object.pojo.*;
import com.tbit.uqbike.object.pojo.vo.OpSuggestionStatVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 建议dao
 *
 * @author Leon
 * 2017年2月24日 下午4:02:36
 */
public interface SuggestionDao {
    /**
     * 添加
     *
     * @param suggestion
     */
    void insert(Suggestion suggestion);

    /**
     * 根据建议id查询
     *
     * @param suggestionId
     * @return
     */
    Suggestion getBySuggestionId(Integer suggestionId);

    /**
     * 根据建议id查询运维意见
     *
     * @param suggestionId
     * @return
     */
    AccountUserSug getAccountSugBySuggestionId(Integer suggestionId);


    /**
     * 根据平台账户id查询
     *
     * @param accountId
     * @return
     */
    List<Suggestion> getByAccountId(Integer accountId);

    /**
     * 根据用户id查询
     *
     * @param userId
     * @return
     */
    List<Suggestion> getByUserId(Integer userId);

    /**
     * 处理
     *
     * @param suggestion
     */
    void handle(Suggestion suggestion);

    /**
     * 运维处理
     *
     * @param
     */
    void handleByaccount(AccountUserSug accountUserSug);

    /**
     * 查询总数
     *
     * @param params
     * @return
     */
    Integer queryCount(Map<String, Object> params);

    /**
     * 分页查询
     *
     * @param params
     * @return
     */
    List<Suggestion> queryPage(Map<String, Object> params);

    /**
     * 查询某段时间内总数
     *
     * @param params
     * @return
     */
    Integer getCountByTime(Map<String, Object> params);

    /**
     * 用户意见反馈导出
     *
     * @param params
     * @return
     */
    List<SuggestionExport> export(Map<String, Object> params);

    /**
     * 运维意见反馈导出
     *
     * @param params
     * @return
     */
    List<SuggestionExport> exportByAccount(Map<String, Object> params);

    /**
     * 运维意见反馈分页查询
     *
     * @param params
     * @return
     */
    List<AccountSuggestion> queryPageByAccount(Map<String, Object> params);

    /**
     * 查询运维意见某段时间内总数
     *
     * @param params
     * @return
     */
    Integer queryCountByAccount(Map<String, Object> params);


    List<SuggestionStat> getStatPage(Integer accountId, Integer state, Date startTime, Date endTime);

    List<SuggestionStat> getOperationStatPage(Integer accountId, Integer state, Date startTime, Date endTime);

    List<OpSuggestionStatVO> getSuggestionStat(Integer accountId, Date startTime, Date endTime);

    /**
     * 查询所有意见总数
     * @param accountIds 区域id列表
     * @return 总数
     */
    int queryAllCount(@Param("accountIds") List<Integer> accountIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 根据意见id批量获取客户端意见
     *
     * @param suggestionIdList 意见id集合
     */
    List<Suggestion> getClientSuggestionByIdList(List<Integer> suggestionIdList);

    /**
     * 根据意见id批量获取运维端意见
     *
     * @param suggestionIdList 意见id集合
     */
    List<AccountSuggestion> getMainSuggestionByIdList(List<Integer> suggestionIdList);

    /**
     * 判断批量处理的意见是否是同一标题
     *
     * @param suggestionIdList 意见id集合
     * @param type             1客户端意见 2运维端意见
     * @return                 true 同一标题 false 不是同一标题
     */
    boolean isEqualTitle(List<Integer> suggestionIdList, Integer type);

    /**
     * 批量更新客户端意见
     *
     * @param suggestionList 意见集合
     */
    void batchHandleClient(@Param("suggestionList") List<Suggestion> suggestionList);

    /**
     * 批量更新运维端意见
     *
     * @param suggestionList 意见集合
     */
    void batchHandleMain(@Param("suggestionList") List<AccountSuggestion> suggestionList);

    /**
     * 根据用户id和区域id集合查询
     *
     * @param userId        用户id
     * @param accountIdList 区域id集合
     */
    List<Suggestion> selectByAccountIdList(@Param("userId") Integer userId, @Param("accountIdList") List<Integer> accountIdList,
                                           @Param("startTime") Date startTime, @Param("endTime") Date endTime);

}
